HyperBloch package tutorial

Flat-bands; hyperbolic kagome lattices

This notebook provides solved exercises aimed to introduce the functionality of the  HyperBloch package for efficient modeling of tight-binding models on hyperbolic lattices. It is intended to be used in tandem with the HyperBloch Flat-bands tutorial on the HyperCells&HyperBloch website. In this tutorial, we demonstrate the emergence of flat-bands in the density of states of an elementary nearest-neighbor hopping model on the {8,3}-kagome lattice. In particular, we emphasize the workflow for Abelian Hyperbolic band theory (AHBT) analysis with the supercell method of kagome (supercell) model graphs  (constructed through HyperBloch’s sister package HyperCells), which is structurally unchanged compared to the analysis of tessellation (supercell) model graphs.

Preliminaries:

Remarks:

Before using the notebook to the Flat-bands tutorial for hyperbolic kagome lattices:

Make sure that the HyperBloch package is installed, if this is not the case please follow the instruction on the website HyperCells&HyperBloch installation.

Make sure that the required files .hcc,  .hcm and .hcs files are in the current directory. This entails files:

(2,3,8)_T2.1_3.hcc
{8,3}-kagome_T2.1_3.hcm
{8,3}-kagome_T2.1_3_sc-T5.1.hcs
{8,3}-kagome_T2.1_3_sc-T17.2.hcs

In case no such files exist in your current directory, please follow the instructions in the  HyperBloch Flat-bands tutorial,  or download the files there.

Documentation:

You may want to take a look at the basic usage guide of the HyperBloch package or the available functions within the package, respectively:

Documentation`HelpLookup["PatrickMLenggenhager/HyperBloch/tutorial/BasicUsage"];

Documentation`HelpLookup["PatrickMLenggenhager/HyperBloch/guide/HyperBlochPackage"];

Load the HyperBloch package:

The HyperBloch package can be loaded as follows:

<<PatrickMLenggenhager`HyperBloch`

Set the directory of the needed HyperCells files remarked above, which is assumed to be the directory of this file:

SetDirectory[NotebookDirectory[]];

Needed functions:

In previous tutorials, getting started with the HyperBloch package and HyperBloch Supercells tutorial, we have calculated the density of states of various nearest-neighbor tight-binding models via exact diagonalization and random samples. We predefine a function in order to calculate the eigenvalues for the Abelian Bloch Hamiltonians that we will construct. We  take advantage of the independence of different momentum sectors and parallelize the computation, where we partition the set of Npts into  Nruns subsets:

ComputeEigenvalues[cfH_,Npts_,Nruns_,genus_]:=
Flatten@ParallelTable[
Flatten@Table[
Eigenvalues[cfH@@RandomReal[{-Pi,Pi},2genus]],{i,1,Round[Npts/Nruns]}],
{j,1,Nruns},Method->"FinestGrained"]

{8,3}-kagome lattice:

Preliminaries:

We consider the following sequence of supercells, defined in terms of triangle group quotients given in the tabulated list of quotients by Marston Conder:

cellsKagome={"T2.1","T5.1","T17.2"};

where we consider the unit cell T2.1 as the primitive cell.

Import (supercell) model graphs:

We first import the cell, model, and supercell model graphs as produced by the HyperCells package:

Cell graph:

pcellKagome=ImportCellGraphString[Import["(2,3,8)_T2.1_3.hcc"]];

Primitive cell:

pcmodelKagome=ImportModelGraphString[Import["{8,3}-kagome_T2.1_3.hcm"]];

Consecutive supercells:

scmodelsKagome=Association[#->ImportSupercellModelGraphString[ Import["{8,3}-kagome_T2.1_3_sc-"<>#<>".hcs"]]&/@cellsKagome[[2;;]]];

We can extract the genera of the compactified unit cells programmatically:

genusLstKagome = Join[
Association[cellsKagome[[1]]->pcmodelKagome["Genus"]],
Association[#->scmodelsKagome[#]["Genus"]&/@cellsKagome[[2;;]]]
];

Visualize the model graph:

We can visualize the model graph with the high-level visualization function VisualizeModelGraph:

VisualizeModelGraph[pcmodelKagome,
CellGraph->pcellKagome,
NumberOfGenerations->3,
Elements-><|
	ShowCellGraphFlattened->{},
	ShowCellBoundary->{ShowEdgeIdentification->True}
|>,
ImageSize->400]

Construct Abelian Bloch Hamiltonians:

Once the (supercell) model graphs are imported the corresponding Abelian Bloch Hamiltonians can be constructed.

Primitive cell:

HpcKagome=AbelianBlochHamiltonian[pcmodelKagome,1,0&,-1&,CompileFunction->True];

Consecutive supercells (this might take a minute):

HscKagomelst=Association[#->AbelianBlochHamiltonian[scmodelsKagome[#],1,0&,-1&,PCModel->pcmodelKagome,CompileFunction->True]&/@cellsKagome[[2;;]]];

For convenience, let us collect the constructed Hamiltonians in one Association:

HcKagomelst=Join[Association[cellsKagome[[1]]->HpcKagome],HscKagomelst];

Density of states:

We have split this section into two parts, due to the computational burden. The calculation of the density of states for the elementary nearest-neighbor hopping model on the T17.2 supercell will take a lot more time to be computed compared to the model on the unit cells T2.1 and T5.1.

Part 1:

We compute the Eigenvalues with a set of  2·(10^4) random samples in momentum space and 32 subsets, (this might take a minute):

evalsKagome1=Association[#->ComputeEigenvalues[HcKagomelst[#],2 (10^4),32,genusLstKagome[#]]&/@cellsKagome[[;;2]]];

Let us construct a list of colors for the different unit cells we are considering:

cLst=(ColorData["SunsetColors","ColorFunction"]/@(1-Range[1,3]/3.));

We choose to visualize the density of states via a kernel density estimation with an energy binwidth of 0.01, (this might take a minute):

dos=SmoothHistogram[evalsKagome1,0.01,"PDF",
Frame->True,FrameLabel->{"Energy E","Density of states"},FrameStyle->Black,
ImageSize->500,ImagePadding->{{Automatic, 10}, {Automatic, 10}},LabelStyle->20,
PlotLabel->"k sampling: 2·(10^4)",PlotRange->{0,1}, PlotStyle->cLst]

Let us take a closer look at the density of states in the vicinity of the emergent flat-band:

Show[dos,
Epilog->{
Inset[Show[First@dos,
FrameLabel->None,Frame->True,ImageSize->200,
LabelStyle->15,PlotRange->{{1.85,2.05},{0, 0.4}},
PlotLabel->None],{-2,0.65}]
}
]

Part 2:

We compute the Eigenvalues with a set of  2·(10^4) random samples in momentum space and 32 subsets, (caution, this takes a long time to be computed):

evalsKagome2=Association[#->ComputeEigenvalues[HcKagomelst[#],2 (10^4),32,genusLstKagome[#]]&/@cellsKagome[[3;;]]];
evalsKagome=Join[evalsKagome1,evalsKagome2];

We choose to visualize the density of states via a kernel density estimation with an energy binwidth of 0.01, (this might take a minute):

dos =SmoothHistogram[evalsKagome,0.01,"PDF",
Frame->True,FrameStyle->Black,FrameLabel->{"Energy E","Density of states"},
LabelStyle->20,ImageSize->500,ImagePadding->{{Automatic, 10}, {Automatic, 10}},
PlotLabel->"k sampling: 2·(10^4)",PlotRange->{0,1}, PlotStyle->cLst]

Let us take a closer look at the density of states in the vicinity of the emergent flat-band once again:

Show[dos,
Epilog->{
Inset[Show[First@dos,
FrameLabel->None,Frame->True,ImageSize->200,
LabelStyle->15,PlotRange->{{1.85,2.05},{0, 0.4}},
PlotLabel->None],{-2,0.65}]
}]

The density of states between the flat-band and the dispersive bands is suppressed with increasing supercell size, such that in the thermodynamic limit the flat-band is detached. This suggests that the gaplessness for the primitive cell is a finite-size effect.

NotebookSave[]